package com.abcode.test.springbootmybatisplus.gen.nick;

import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors;

public class NicknameGenerator {
    private static final Random random = new Random();
    private static final List<String> FIRST_NAMES = Arrays.asList(
            // 扩展名字列表（新增50个）
            "Alex", "Bailey", "Charlie", "Dakota", "Eli", "Finley", "Gus", "Harper",
            "Ivy", "Jesse", "Kai", "Logan", "Max", "Noah", "Ollie", "Parker",
            "Quinn", "Riley", "Sam", "Taylor", "Ulysses", "Violet", "Wren", "Xavier",
            "Yara", "Zane", "Avery", "Blake", "Casey", "Dylan", "Evan", "Flynn",
            "Gray", "Hayes", "Jamie", "Kip", "Lennon", "Morgan", "Nico", "Owen",
            "Phoenix", "Reese", "Sage", "Tyler", "Uri", "Valen", "Weston", "Xena",
            "Yael", "Zion", "Aspen", "Bentley", "Cameron", "Dallas", "Everett",
            "Fisher", "Grayson", "Huxley", "Indigo", "Journey", "Kingston", "Luna",
            "Milo", "Nova", "Oakley", "Peyton", "Quill", "River", "Sterling", "Tate",
            "Ulric", "Vance", "Wilder", "Xylar", "Yoshi", "Zephyr",
            "Aria", "Blaise", "Cypress", "Dylan", "Echo", "Finn", "Gemma", "Hazel",
            "Iris", "Jett", "Koda", "Lira", "Mara", "Nox", "Orion", "Poe",
            "Quinn", "Rory", "Sable", "Thorne", "Umbra", "Veda", "Wolf", "Xena",
            "Yarrow", "Zora", "Atlas", "Belle", "Caspian", "Dove", "Elias", "Fable",
            "Gideon", "Harlow", "Icarus", "Juno", "Kane", "Lyra", "Malik", "Nyx",
            "Odin", "Pryce", "Raven", "Sylas", "Talon", "Ulysses", "Vesper", "Wren",
            "Xander", "Yvette", "Zephyr"
    );
    private static final List<String> LAST_NAMES = Arrays.asList(
            // 扩展姓氏列表（新增50个）
            "Smith", "Johnson", "Williams", "Jones", "Brown", "Davis", "Miller", "Wilson",
            "Moore", "Taylor", "Anderson", "Thomas", "Jackson", "White", "Harris", "Martin",
            "Thompson", "Garcia", "Martinez", "Robinson", "Clark", "Rodriguez", "Lewis",
            "Lee", "Walker", "Hall", "Allen", "Young", "Hernandez", "King", "Wright",
            "Lopez", "Hill", "Scott", "Green", "Adams", "Baker", "Gonzalez", "Nelson",
            "Carter", "Mitchell", "Perez", "Roberts", "Turner", "Phillips", "Campbell",
            "Parker", "Evans", "Edwards", "Collins", "Stewart", "Sanchez", "Morris",
            "Rogers", "Reed", "Cook", "Morgan", "Bell", "Murphy", "Bailey", "Rivera",
            "Cooper", "Richardson", "Cox", "Howard", "Ward", "Torres", "Peterson",
            "Gray", "Ramirez", "James", "Watson", "Brooks", "Kelly", "Sanders", "Price",
            "Bennett", "Wood", "Barnes", "Ross", "Henderson", "Coleman", "Jenkins",
            "Perry", "Powell", "Long", "Patterson", "Hughes", "Flores", "Washington",
            "Butler", "Simmons", "Foster", "Gonzales", "Bryant", "Alexander", "Russell",
            "Griffin", "Diaz", "Hayes",
            "Adler", "Beck", "Cruz", "Drake", "Everett", "Frost", "Gage", "Holt",
            "Iverson", "Jensen", "Kane", "Lane", "Mason", "Nash", "Owen", "Pike",
            "Reed", "Stone", "Thorne", "Vega", "Wade", "Xavier", "Young", "Zane",
            "Avery", "Blake", "Carter", "Dallas", "Ellis", "Fox", "Grant", "Hunt",
            "Ivy", "Jett", "King", "Lyon", "Maxwell", "Noble", "Ortega", "Parker",
            "Quinn", "Ryan", "Sage", "Tate", "Upton", "Valdez", "West", "Xander",
            "York", "Zimmer", "Asher", "Bishop", "Cade", "Dawson", "Emerson", "Finn",
            "Gunner", "Hawk", "Ivan", "Jasper", "Knight", "Lynch", "Miles", "Nova",
            "Oscar", "Phoenix", "Rider", "Slade", "Talon", "Ulrich", "Vance", "Wyatt"
    );
    // 扩展ADJECTIVES词库至500个形容词
    private static final List<String> ADJECTIVES = Arrays.asList(
            // 原始词库（示例）
            "Happy", "Sunny", "Clever", "Brave", "Kind", "Smart", "Funny", "Cute",
            "Gentle", "Loyal", "Bold", "Calm", "Wild", "Proud", "Sharp", "Soft",
            "Swift", "Bright", "Wise", "Pure", "Rich", "Poor", "Tall", "Short",
            "Young", "Old", "Strong", "Weak", "Fast", "Slow", "Thick", "Thin",
            "Big", "Small", "Fat", "Skinny", "Tiny", "Huge", "Angry", "Glad",
            "Sad", "Mild", "Fierce", "Sweet", "Sour", "Bitter", "Fresh", "Stale",
            "Warm", "Cold", "Hot", "Cool", "Dry", "Wet", "Hard", "Soft",
            "Rough", "Smooth", "Heavy", "Light", "Tough", "Gentle", "Vast", "Tiny",
            "Deep", "Shallow", "Wide", "Narrow", "Long", "Short", "High", "Low",
            "Far", "Near", "Clean", "Dirty", "Neat", "Messy", "Fancy", "Plain",
            "Quiet", "Loud", "Busy", "Idle", "Alive", "Dead", "Free", "Captive",
            "Whole", "Broken", "Full", "Empty", "Rich", "Poor", "True", "False",
            "Right", "Wrong", "Early", "Late", "Quick", "Slow", "First", "Last",
            "Best", "Worst", "Kind", "Cruel", "Lazy", "Eager", "Proud", "Humble",
            "Honest", "Dishonest", "Brave", "Cowardly", "Polite", "Rude", "Friendly", "Unfriendly",
            "Generous", "Selfish", "Patient", "Impatient", "Happy", "Sad", "Cheerful", "Gloomy",
            "Peaceful", "Noisy", "Calm", "Nervous", "Pleasant", "Unpleasant", "Beautiful", "Ugly",
            "Pretty", "Homely", "Attractive", "Unattractive", "Charming", "Repulsive", "Graceful", "Clumsy",
            "Elegant", "Awkward", "Smart", "Dumb", "Intelligent", "Stupid", "Clever", "Foolish",
            "Witty", "Dull", "Creative", "Unimaginative", "Original", "Copycat", "Talented", "Untalented",
            "Skilled", "Unskilled", "Expert", "Amateur", "Proficient", "Inept", "Capable", "Incapable",
            "Powerful", "Weak", "Strong", "Feeble", "Healthy", "Sickly", "Robust", "Frail",
            "Active", "Lazy", "Energetic", "Lethargic", "Vibrant", "Dull", "Alive", "Dead",
            "Busy", "Idle", "Productive", "Unproductive", "Efficient", "Inefficient", "Organized", "Disorganized",
            "Orderly", "Chaotic", "Systematic", "Haphazard", "Methodical", "Random", "Careful", "Careless",
            "Precise", "Imprecise", "Accurate", "Inaccurate", "Reliable", "Unreliable", "Trustworthy", "Untrustworthy",
            "Faithful", "Unfaithful", "Loyal", "Disloyal", "Devoted", "Apathetic", "Passionate", "Apathetic",
            "Enthusiastic", "Indifferent", "Zealous", "Apathetic", "Ardent", "Lethargic", "Fervent", "Apathetic",
            "Sincere", "Hypocritical", "Genuine", "Fake", "Honest", "Dishonest", "Truthful", "Lying",
            "Frank", "Secretive", "Open", "Closed", "Friendly", "Unfriendly", "Kind", "Cruel",
            "Generous", "Selfish", "Helpful", "Unhelpful", "Considerate", "Inconsiderate", "Thoughtful", "Thoughtless",
            "Polite", "Rude", "Courteous", "Discourteous", "Respectful", "Disrespectful", "Tactful", "Tactless",
            "Diplomatic", "Undiplomatic", "Gracious", "Ungracious", "Charming", "Unpleasant", "Delightful", "Unpleasant",
            "Pleasant", "Unpleasant", "Agreeable", "Disagreeable", "Nice", "Nasty", "Sweet", "Sour",
            "Gentle", "Harsh", "Mild", "Severe", "Soft", "Hard", "Tender", "Rough",
            "Smooth", "Bumpy", "Flat", "Hilly", "Level", "Uneven", "Straight", "Crooked",
            "Curved", "Angular", "Round", "Square", "Rectangular", "Triangular", "Circular", "Oval",
            "Thick", "Thin", "Wide", "Narrow", "Long", "Short", "Tall", "Short",
            "High", "Low", "Deep", "Shallow", "Far", "Near", "Close", "Distant",
            "Big", "Small", "Large", "Little", "Huge", "Tiny", "Gigantic", "Minuscule",
            "Massive", "Petite", "Enormous", "Tiny", "Immense", "Minute", "Vast", "Tiny",
            "Heavy", "Light", "Weighty", "Feathery", "Dense", "Sparse", "Solid", "Hollow",
            "Strong", "Weak", "Powerful", "Feeble", "Mighty", "Puny", "Sturdy", "Flimsy",
            "Tough", "Brittle", "Durable", "Fragile", "Resilient", "Breakable", "Flexible", "Rigid",
            "Elastic", "Stiff", "Supple", "Inflexible", "Malleable", "Brittle", "Ductile", "Brittle",
            "Soft", "Hard", "Smooth", "Rough", "Silky", "Coarse", "Velvety", "Rough",
            "Warm", "Cold", "Hot", "Cool", "Lukewarm", "Freezing", "Boiling", "Chilly",
            "Warmth", "Coldness", "Heat", "Coolness", "Dry", "Wet", "Moist", "Damp",
            "Humid", "Arid", "Parched", "Soggy", "Soaked", "Dry", "Desiccated", "Drenched",
            "Clean", "Dirty", "Spotless", "Filthy", "Immaculate", "Messy", "Tidy", "Cluttered",
            "Neat", "Sloppy", "Organized", "Disorganized", "Orderly", "Chaotic", "Systematic", "Haphazard",
            "Bright", "Dark", "Light", "Dim", "Gloomy", "Sunny", "Cloudy", "Foggy",
            "Clear", "Hazy", "Sharp", "Blurry", "Vivid", "Dull", "Colorful", "Drab",
            "Rich", "Pale", "Loud", "Quiet", "Noisy", "Silent", "Soft", "Loud",
            "High-pitched", "Low-pitched", "Shrill", "Deep", "Sharp", "Dull", "Mellow", "Harsh",
            "Sweet", "Sour", "Bitter", "Salty", "Spicy", "Tasty", "Delicious", "Unappetizing",
            "Fresh", "Stale", "Ripe", "Unripe", "Rotten", "Tender", "Tough", "Juicy",
            "Dry", "Moist", "Crunchy", "Soft", "Chewy", "Crisp", "Flaky", "Greasy",
            "Healthy", "Unhealthy", "Nutritious", "Junk", "Organic", "Processed", "Natural", "Artificial",
            "Fast", "Slow", "Quick", "Gradual", "Rapid", "Sluggish", "Speedy", "Lazy",
            "Early", "Late", "Punctual", "Tardy", "Prompt", "Delayed", "On-time", "Late",
            "First", "Last", "Best", "Worst", "Top", "Bottom", "Above", "Below",
            "Inside", "Outside", "Up", "Down", "Left", "Right", "Forward", "Backward",
            "North", "South", "East", "West", "Front", "Rear", "Beginning", "End",
            "Start", "Finish", "Open", "Closed", "New", "Old", "Young", "Old",
            "Modern", "Ancient", "Future", "Past", "Present", "Alive", "Dead", "Living",
            "Real", "Fake", "True", "False", "Right", "Wrong", "Correct", "Incorrect",
            "Accurate", "Inaccurate", "Precise", "Imprecise", "Exact", "Approximate", "Perfect", "Imperfect",
            "Complete", "Incomplete", "Whole", "Broken", "Entire", "Partial", "Total", "Partial",
            "All", "None", "Some", "Any", "Much", "Little", "Many", "Few",
            "Enough", "Scarce", "Abundant", "Plentiful", "Ample", "Scanty", "Sufficient", "Insufficient",
            "Extra", "Spare", "Surplus", "Deficit", "More", "Less", "Most", "Least",
            "Better", "Worse", "Good", "Bad", "Excellent", "Terrible", "Great", "Awful",
            "Fine", "Poor", "Superior", "Inferior", "Best", "Worst", "Top", "Bottom",
            "High", "Low", "Tall", "Short", "Long", "Short", "Wide", "Narrow",
            "Deep", "Shallow", "Thick", "Thin", "Heavy", "Light", "Big", "Small",
            "Large", "Little", "Huge", "Tiny", "Gigantic", "Minuscule", "Massive", "Petite",
            "Enormous", "Tiny", "Immense", "Minute", "Vast", "Tiny", "Strong", "Weak",
            "Powerful", "Feeble", "Mighty", "Puny", "Sturdy", "Flimsy", "Tough", "Brittle",
            "Durable", "Fragile", "Resilient", "Breakable", "Flexible", "Rigid", "Elastic", "Stiff",
            "Supple", "Inflexible", "Malleable", "Brittle", "Ductile", "Brittle", "Soft", "Hard",
            "Smooth", "Rough", "Silky", "Coarse", "Velvety", "Rough", "Warm", "Cold",
            "Hot", "Cool", "Lukewarm", "Freezing", "Boiling", "Chilly", "Warmth", "Coldness",
            "Heat", "Coolness", "Dry", "Wet", "Moist", "Damp", "Humid", "Arid",
            "Parched", "Soggy", "Soaked", "Dry", "Desiccated", "Drenched", "Clean", "Dirty",
            "Spotless", "Filthy", "Immaculate", "Messy", "Tidy", "Cluttered", "Neat", "Sloppy",
            "Organized", "Disorganized", "Orderly", "Chaotic", "Systematic", "Haphazard", "Bright", "Dark",
            "Light", "Dim", "Gloomy", "Sunny", "Cloudy", "Foggy", "Clear", "Hazy",
            "Sharp", "Blurry", "Vivid", "Dull", "Colorful", "Drab", "Rich", "Pale",
            "Loud", "Quiet", "Noisy", "Silent", "Soft", "Loud", "High-pitched", "Low-pitched",
            "Shrill", "Deep", "Sharp", "Dull", "Mellow", "Harsh", "Sweet", "Sour",
            "Bitter", "Salty", "Spicy", "Tasty", "Delicious", "Unappetizing", "Fresh", "Stale",
            "Ripe", "Unripe", "Rotten", "Tender", "Tough", "Juicy", "Dry", "Moist",
            "Crunchy", "Soft", "Chewy", "Crisp", "Flaky", "Greasy", "Healthy", "Unhealthy",
            "Nutritious", "Junk", "Organic", "Processed", "Natural", "Artificial", "Fast", "Slow",
            "Quick", "Gradual", "Rapid", "Sluggish", "Speedy", "Lazy", "Early", "Late",
            "Punctual", "Tardy", "Prompt", "Delayed", "On-time", "Late", "First", "Last",
            "Best", "Worst", "Top", "Bottom", "Above", "Below", "Inside", "Outside",
            "Up", "Down", "Left", "Right", "Forward", "Backward", "North", "South",
            "East", "West", "Front", "Rear", "Beginning", "End", "Start", "Finish",
            "Open", "Closed", "New", "Old", "Young", "Old", "Modern", "Ancient",
            "Future", "Past", "Present", "Alive", "Dead", "Living", "Real", "Fake",
            "True", "False", "Right", "Wrong", "Correct", "Incorrect", "Accurate", "Inaccurate",
            "Precise", "Imprecise", "Exact", "Approximate", "Perfect", "Imperfect", "Complete", "Incomplete",
            "Whole", "Broken", "Entire", "Partial", "Total", "Partial", "All", "None",
            "Some", "Any", "Much", "Little", "Many", "Few", "Enough", "Scarce",
            "Abundant", "Plentiful", "Ample", "Scanty", "Sufficient", "Insufficient", "Extra", "Spare",
            "Surplus", "Deficit", "More", "Less", "Most", "Least", "Better", "Worse",
            "Good", "Bad", "Excellent", "Terrible", "Great", "Awful", "Fine", "Poor",
            "Superior", "Inferior", "Best", "Worst", "Top", "Bottom", "High", "Low",
            "Tall", "Short", "Long", "Short", "Wide", "Narrow", "Deep", "Shallow",
            "Thick", "Thin", "Heavy", "Light", "Big", "Small", "Large", "Little",
            "Huge", "Tiny", "Gigantic", "Minuscule", "Massive", "Petite", "Enormous", "Tiny",
            "Immense", "Minute", "Vast", "Tiny", "Strong", "Weak", "Powerful", "Feeble",
            "Mighty", "Puny", "Sturdy", "Flimsy", "Tough", "Brittle", "Durable", "Fragile",
            "Resilient", "Breakable", "Flexible", "Rigid", "Elastic", "Stiff", "Supple", "Inflexible",
            "Malleable", "Brittle", "Ductile", "Brittle", "Soft", "Hard", "Smooth", "Rough",
            "Silky", "Coarse", "Velvety", "Rough", "Warm", "Cold", "Hot", "Cool",
            "Lukewarm", "Freezing", "Boiling", "Chilly", "Warmth", "Coldness", "Heat", "Coolness",
            "Dry", "Wet", "Moist", "Damp", "Humid", "Arid", "Parched", "Soggy",
            "Soaked", "Dry", "Desiccated", "Drenched", "Clean", "Dirty", "Spotless", "Filthy",
            "Immaculate", "Messy", "Tidy", "Cluttered", "Neat", "Sloppy", "Organized", "Disorganized",
            "Orderly", "Chaotic", "Systematic", "Haphazard", "Bright", "Dark", "Light", "Dim",
            "Gloomy", "Sunny", "Cloudy", "Foggy", "Clear", "Hazy", "Sharp", "Blurry",
            "Vivid", "Dull", "Colorful", "Drab", "Rich", "Pale", "Loud", "Quiet",
            "Noisy", "Silent", "Soft", "Loud", "High-pitched", "Low-pitched", "Shrill", "Deep",
            "Sharp", "Dull", "Mellow", "Harsh", "Sweet", "Sour", "Bitter", "Salty",
            "Spicy", "Tasty", "Delicious", "Unappetizing", "Fresh", "Stale", "Ripe", "Unripe",
            "Rotten", "Tender", "Tough", "Juicy", "Dry", "Moist", "Crunchy", "Soft",
            "Chewy", "Crisp", "Flaky", "Greasy", "Healthy", "Unhealthy", "Nutritious", "Junk",
            "Organic", "Processed", "Natural", "Artificial", "Fast", "Slow", "Quick", "Gradual",
            "Rapid", "Sluggish", "Speedy", "Lazy", "Early", "Late", "Punctual", "Tardy",
            "Prompt", "Delayed", "On-time", "Late", "First", "Last", "Best", "Worst",
            "Top", "Bottom", "Above", "Below", "Inside", "Outside", "Up", "Down",
            "Left", "Right", "Forward", "Backward", "North", "South", "East", "West",
            "Front", "Rear", "Beginning", "End", "Start", "Finish", "Open", "Closed",
            "New", "Old", "Young", "Old", "Modern", "Ancient", "Future", "Past",
            "Present", "Alive", "Dead", "Living", "Real", "Fake", "True", "False",
            "Right", "Wrong", "Correct", "Incorrect", "Accurate", "Inaccurate", "Precise", "Imprecise",
            "Exact", "Approximate", "Perfect", "Imperfect", "Complete", "Incomplete", "Whole", "Broken",
            "Entire", "Partial", "Total", "Partial", "All", "None", "Some", "Any",
            "Much", "Little", "Many", "Few", "Enough", "Scarce", "Abundant", "Plentiful",
            "Ample", "Scanty", "Sufficient", "Insufficient", "Extra", "Spare", "Surplus", "Deficit",
            "More", "Less", "Most", "Least", "Better", "Worse", "Good", "Bad",
            "Excellent", "Terrible", "Great", "Awful", "Fine", "Poor", "Superior", "Inferior",
            "Best", "Worst", "Top", "Bottom", "High", "Low", "Tall", "Short",
            "Long", "Short", "Wide", "Narrow", "Deep", "Shallow", "Thick", "Thin",
            "Heavy", "Light", "Big", "Small", "Large", "Little", "Huge", "Tiny",
            "Gigantic", "Minuscule", "Massive", "Petite", "Enormous", "Tiny", "Immense", "Minute",
            "Vast", "Tiny", "Strong", "Weak", "Powerful", "Feeble", "Mighty", "Puny",
            "Sturdy", "Flimsy", "Tough", "Brittle", "Durable", "Fragile", "Resilient", "Breakable",
            "Flexible", "Rigid", "Elastic", "Stiff", "Supple", "Inflexible", "Malleable", "Brittle",
            "Ductile", "Brittle", "Soft", "Hard", "Smooth", "Rough", "Silky", "Coarse",
            "Velvety", "Rough", "Warm", "Cold", "Hot", "Cool", "Lukewarm", "Freezing",
            "Boiling", "Chilly", "Warmth", "Coldness", "Heat", "Coolness", "Dry", "Wet",
            "Moist", "Damp", "Humid", "Arid", "Parched", "Soggy", "Soaked", "Dry",
            "Desiccated", "Drenched", "Clean", "Dirty", "Spotless", "Filthy", "Immaculate", "Messy",
            "Tidy", "Cluttered", "Neat", "Sloppy", "Organized", "Disorganized", "Orderly", "Chaotic",
            "Systematic", "Haphazard", "Bright", "Dark", "Light", "Dim", "Gloomy", "Sunny",
            "Cloudy", "Foggy", "Clear", "Hazy", "Sharp", "Blurry", "Vivid", "Dull",
            "Colorful", "Drab", "Rich", "Pale", "Loud", "Quiet", "Noisy", "Silent",
            "Soft", "Loud", "High-pitched", "Low-pitched", "Shrill", "Deep", "Sharp", "Dull",
            "Mellow", "Harsh", "Sweet", "Sour", "Bitter", "Salty", "Spicy", "Tasty",
            "Delicious", "Unappetizing", "Fresh", "Stale", "Ripe", "Unripe", "Rotten", "Tender",
            "Tough", "Juicy", "Dry", "Moist", "Crunchy", "Soft", "Chewy", "Crisp",
            "Flaky", "Greasy", "Healthy", "Unhealthy", "Nutritious", "Junk", "Organic", "Processed",
            "Natural", "Artificial", "Fast", "Slow", "Quick", "Gradual", "Rapid", "Sluggish",
            "Speedy", "Lazy", "Early", "Late", "Punctual", "Tardy", "Prompt", "Delayed",
            "On-time", "Late", "First", "Last", "Best", "Worst", "Top", "Bottom",
            "Above", "Below", "Inside", "Outside", "Up", "Down", "Left", "Right",
            "Forward", "Backward", "North", "South", "East", "West", "Front", "Rear",
            "Beginning", "End", "Start", "Finish", "Open", "Closed", "New", "Old",
            "Young", "Old", "Modern", "Ancient", "Future", "Past", "Present", "Alive",
            "Dead", "Living", "Real", "Fake", "True", "False", "Right", "Wrong",
            "Correct", "Incorrect", "Accurate", "Inaccurate", "Precise", "Imprecise", "Exact", "Approximate",
            "Perfect", "Imperfect", "Complete", "Incomplete", "Whole", "Broken", "Entire", "Partial",
            "Total", "Partial", "All", "None", "Some", "Any", "Much", "Little",
            "Many", "Few", "Enough", "Scarce", "Abundant", "Plentiful", "Ample", "Scanty",
            "Sufficient", "Insufficient", "Extra", "Spare", "Surplus", "Deficit", "More", "Less",
            "Most", "Least", "Better", "Worse", "Good", "Bad", "Excellent", "Terrible",
            "Great", "Awful", "Fine", "Poor", "Superior", "Inferior", "Best", "Worst",
            "Top", "Bottom", "High", "Low", "Tall", "Short", "Long", "Short",
            "Wide", "Narrow", "Deep", "Shallow", "Thick", "Thin", "Heavy", "Light",
            "Big", "Small", "Large", "Little", "Huge", "Tiny", "Gigantic", "Minuscule",
            "Massive", "Petite", "Enormous", "Tiny", "Immense", "Minute", "Vast", "Tiny",
            "Strong", "Weak", "Powerful", "Feeble", "Mighty", "Puny", "Sturdy", "Flimsy",
            "Tough", "Brittle", "Durable", "Fragile", "Resilient", "Breakable", "Flexible", "Rigid",
            "Elastic", "Stiff", "Supple", "Inflexible", "Malleable", "Brittle", "Ductile", "Brittle",
            "Soft", "Hard", "Smooth", "Rough", "Silky", "Coarse", "Velvety", "Rough",
            "Warm", "Cold", "Hot", "Cool", "Lukewarm", "Freezing", "Boiling", "Chilly",
            "Warmth", "Coldness", "Heat", "Coolness", "Dry", "Wet", "Moist", "Damp",
            "Humid", "Arid", "Parched", "Soggy", "Soaked", "Dry", "Desiccated", "Drenched",
            "Clean", "Dirty", "Spotless", "Filthy", "Immaculate", "Messy", "Tidy", "Cluttered",
            "Neat", "Sloppy", "Organized", "Disorganized", "Orderly", "Chaotic", "Systematic", "Haphazard",
            "Bright", "Dark", "Light", "Dim", "Gloomy", "Sunny", "Cloudy", "Foggy",
            "Clear", "Hazy", "Sharp", "Blurry", "Vivid", "Dull", "Colorful", "Drab",
            "Rich", "Pale", "Loud", "Quiet", "Noisy", "Silent", "Soft", "Loud",
            "High-pitched", "Low-pitched", "Shrill", "Deep", "Sharp", "Dull", "Mellow", "Harsh",
            "Sweet", "Sour", "Bitter", "Salty", "Spicy", "Tasty", "Delicious", "Unappetizing",
            "Fresh", "Stale", "Ripe", "Unripe", "Rotten", "Tender", "Tough", "Juicy",
            "Dry", "Moist", "Crunchy", "Soft", "Chewy", "Crisp", "Flaky", "Greasy",
            "Healthy", "Unhealthy", "Nutritious", "Junk", "Organic", "Processed", "Natural", "Artificial"
    );
    // 扩展ANIMALS词库至500个动物名称（长度≤5字符为主）
    private static final List<String> ANIMALS = Arrays.asList(
            // 常见宠物与动物（基础词库）
            "Dog", "Cat", "Fox", "Wolf", "Bear", "Lion", "Tiger", "Deer",
            "Bird", "Fish", "Goat", "Lamb", "Pig", "Horse", "Mule", "Cow",
            "Duck", "Hen", "Eel", "Bee", "Fly", "Ant", "Rat", "Bat",
            "Owl", "Paw", "Cub", "Pup", "Kid", "Foal", "Koi", "Bass",
            "Swan", "Seal", "Crab", "Moth", "Wasp", "Lark", "Oryx", "Elk",

            // 野生动物（4-5字符）
            "Sable", "Badger", "Otter", "Stoat", "Weasel", "Ferret", "Mink", "Bison",
            "Moose", "Reed", "Snipe", "Skunk", "Squid", "Lynx", "Coyote", "Puma",
            "Cougar", "Bobcat", "Sable", "Ermine", "Vole", "Shrew", "Gnu", "Ibex",
            "Okapi", "Quail", "Raven", "Snail", "Viper", "Worm", "Yak", "Zebu",

            // 神话与幻想动物
            "Phoenix", "Dragon", "Griffin", "Mermaid", "Sprite", "Gnome", "Imp", "Fairy",
            "Leprechaun", "Basilisk", "Hydra", "Unicorn", "Werewolf", "Vampire", "Djinn", "Kraken",
            "Siren", "Wraith", "Pixie", "Troll", "Dwarf", "Elf", "Mummy", "Ghoul",

            // 海洋生物（4-5字符）
            "Shark", "Whale", "Dolphin", "Oyster", "Clam", "Shrimp", "Coral", "Jelly",
            "Octopus", "Squid", "Eel", "Lobster", "Seal", "Penguin", "Walrus", "Manatee",
            "Starfish", "Urchin", "Ray", "Mussel", "Anemone", "Cuttle", "Goby", "Mackerel",

            // 鸟类（4-5字符）
            "Eagle", "Hawk", "Falcon", "Sparrow", "Robin", "Crow", "Dove", "Owl",
            "Parrot", "Hummingbird", "Penguin", "Peacock", "Flamingo", "Swan", "Crane", "Heron",
            "Vulture", "Kite", "Wren", "Jay", "Finch", "Lark", "Oriole", "Tern",

            // 昆虫与小型生物（4-5字符）
            "Bee", "Ant", "Spider", "Butterfly", "Moth", "Scorpion", "Beetle", "Wasp",
            "Cricket", "Grasshopper", "Ladybug", "Dragonfly", "Mosquito", "Fly", "Caterpillar", "Slug",
            "Centipede", "Millipede", "Worm", "Louse", "Tick", "Flea", "Mite", "Maggot",

            // 爬行动物与两栖动物（4-5字符）
            "Snake", "Lizard", "Turtle", "Frog", "Toad", "Crocodile", "Alligator", "Chameleon",
            "Gecko", "Iguana", "Viper", "Python", "Boa", "Salamander", "Newt", "Cobra",
            "Rattlesnake", "Skink", "Anole", "Basilisk", "Tortoise", "Caiman", "Gila", "Agama",

            // 异国与稀有动物（4-5字符）
            "Panda", "Koala", "Kangaroo", "Wombat", "Platypus", "Echidna", "Kookaburra", "Wallaby",
            "Quokka", "Dingo", "Cassowary", "Emu", "Kiwi", "Tasmanian", "Bilby", "Numbat",
            "Meerkat", "Aardvark", "Wildebeest", "Caribou", "Tapir", "Okapi", "Gazelle", "Impala",

            // 小型与可爱动物（4-5字符）
            "Bunny", "Hedgehog", "Hamster", "Gerbil", "Guinea", "Ferret", "Chinchilla", "Squirrel",
            "Rabbit", "Chipmunk", "Dormouse", "Lemur", "Pika", "Cavy", "Marmot", "Vole",
            "Shrew", "Stoat", "Weasel", "Otter", "Mink", "Badger", "Skunk", "Coati",

            // 虚构与网络热梗动物
            "Blobfish", "Axolotl", "Quokka", "Fennec", "Capybara", "Narwhal", "Sloth", "Llama",
            "Alpaca", "Serval", "Fossa", "Kinkajou", "Binturong", "Pangolin", "Ayeaye", "Quoll",
            "Saiga", "Tarsier", "Proboscis", "Sunda", "Mangalitsa", "Nudibranch", "Blob", "Yeti",

            // 更多海洋生物（4-5字符）
            "Abalone", "Angelfish", "Barracuda", "Blowfish", "Cuttlefish", "Grouper", "Haddock", "Halibut",
            "Jellyfish", "Lionfish", "Mackerel", "Mantis", "Marlin", "Puffer", "Seahorse", "Swordfish",
            "Tarpon", "Triggerfish", "Tuna", "Wrasse", "Clownfish", "Eelpout", "Goby", "Hake",

            // 更多鸟类（4-5字符）
            "Albatross", "Bittern", "Chickadee", "Condor", "Cormorant", "Curlew", "Dipper", "Egret",
            "Fulmar", "Gannet", "Godwit", "Grebe", "Guillemot", "Hawk", "Hoatzin", "Ibis",
            "Kestrel", "Kittiwake", "Loon", "Merganser", "Nighthawk", "Oriole", "Plover", "Puffin",

            // 更多昆虫（4-5字符）
            "Assassin", "Bumblebee", "Cicada", "Damsel", "Earwig", "Firefly", "Gnat", "Hornet",
            "Katydid", "Lacewing", "Leafhopper", "Mantid", "Mayfly", "Stinkbug", "Stonefly", "Termite",
            "Tsetse", "Walkingstick", "Weevil", "Woodlouse", "Yellowjacket", "Zebra", "Aphid", "Booklouse",

            // 更多爬行动物（4-5字符）
            "Alligator", "Amphisbaena", "Blindworm", "Caiman", "Chameleon", "Crocodile", "Gecko", "Glasslizard",
            "Hornedtoad", "Iguana", "Leglesslizard", "Monitor", "Skink", "Slowworm", "Tortoise", "Tuatar",
            "Waterdragon", "Wormlizard", "Adder", "Boa", "Cobra", "Mamba", "Rattlesnake", "Viper",

            // 更多异国动物（4-5字符）
            "Addax", "Aoudad", "Aurochs", "Bactrian", "Banteng", "Bighorn", "Bison", "Bonobo",
            "Bongo", "Bubalus", "Bushbuck", "Caribou", "Chamois", "Chimpanzee", "Dikdik", "Dromedary",
            "Eland", "Gaur", "Gerenuk", "Gorilla", "Hartebeest", "Hartebeest", "Ibex", "Impala",
            "Kudu", "Lechwe", "Lemming", "Llama", "Mouflon", "Nyala", "Ocelot", "Okapi",
            "Onager", "Oryx", "Pudu", "Quagga", "Reindeer", "Saiga", "Sambar", "Scimitar",
            "Serval", "Springbok", "Steenbok", "Tahr", "Topi", "Toucan", "Vicuña", "Wildebeest",
            "Yak", "Zebu", "Zebra", "Zorilla", "Zou", "Aardvark", "Aardwolf", "African",
            "Antbear", "Ape", "Baboon", "Badger", "Bandicoot", "Bat", "Beaver", "Binturong",
            "Bison", "Blackbuck", "Bluebuck", "Bobcat", "Bongo", "Bonobo", "Brownbear", "Brush",
            "Bull", "Bushbaby", "Bushbuck", "Butterfly", "Camel", "Caracal", "Caribou", "Cassowary",
            "Cat", "Cattle", "Centipede", "Chamois", "Cheetah", "Chicken", "Chimpanzee", "Chipmunk",
            "Civet", "Clam", "Cobra", "Cockroach", "Cod", "Condor", "Constrictor", "Coot",
            "Copperhead", "Cougar", "Cow", "Coyote", "Crab", "Crane", "Crocodile", "Crow",
            "Cuckoo", "Curlew", "Deer", "Dhole", "Dingo", "Dinosaur", "Dog", "Dolphin",
            "Donkey", "Dormouse", "Dotterel", "Dragon", "Dragonfly", "Duck", "Dugong", "Dunlin",
            "Eagle", "Earwig", "Echidna", "Eel", "Egret", "Elephant", "Elk", "Emu",
            "Falcon", "Ferret", "Finch", "Fish", "Flamingo", "Flounder", "Fly", "Flying",
            "Fossa", "Fox", "Frog", "Gadwall", "Gannet", "Gazelle", "Gecko", "Gerbil",
            "Gharial", "Giant", "Gibbon", "Giraffe", "Gnat", "Goat", "Goldfish", "Goose",
            "Gopher", "Gorilla", "Grasshopper", "Grebe", "Grenadier", "Greyhound", "Grouse", "Guanaco",
            "Guinea", "Gull", "Hamster", "Hare", "Harrier", "Hawk", "Hedgehog", "Heron",
            "Herring", "Hippopotamus", "Hornet", "Horse", "Hound", "Human", "Hummingbird", "Hyena",
            "Ibex", "Ibis", "Impala", "Jackal", "Jaguar", "Jay", "Jellyfish", "Kakapo",
            "Kangaroo", "Kingfisher", "Kite", "Kiwi", "Koala", "Kookaburra", "Kouprey", "Krill",
            "Kudu", "Lamprey", "Land", "Lark", "Lemming", "Lemur", "Leopard", "Lion",
            "Lizard", "Llama", "Lobster", "Locust", "Loon", "Louse", "Lynx", "Macaw",
            "Mackerel", "Magpie", "Mammoth", "Manatee", "Manta", "Mantis", "Marmoset", "Marmot",
            "Marsupial", "Marten", "Mastodon", "Mayfly", "Mealworm", "Meerkat", "Mink", "Mole",
            "Mongoose", "Monitor", "Monkey", "Moose", "Mosquito", "Moth", "Mouse", "Mule",
            "Narwhal", "Newt", "Nightingale", "Numbat", "Octopus", "Okapi", "Opossum", "Orangutan",
            "Orca", "Ostrich", "Otter", "Owl", "Ox", "Oyster", "Pademelon", "Pangolin",
            "Panther", "Parrot", "Partridge", "Peacock", "Pelican", "Penguin", "Perch", "Pheasant",
            "Pig", "Pigeon", "Pike", "Pika", "Piranha", "Platypus", "Plover", "Polecat",
            "Pony", "Porcupine", "Porpoise", "Possum", "Prairie", "Prawn", "Puffin", "Puma",
            "Quail", "Quokka", "Rabbit", "Raccoon", "Rail", "Ram", "Rat", "Raven",
            "Ray", "Reindeer", "Rhinoceros", "Rook", "Rooster", "Sable", "Salamander", "Salmon",
            "Sandpiper", "Sardine", "Scorpion", "Seahorse", "Seal", "Sea", "Serval", "Shark",
            "Sheep", "Shrew", "Shrimp", "Skink", "Skunk", "Snail", "Snake", "Snipe",
            "Sparrow", "Spider", "Sponge", "Squid", "Squirrel", "Starfish", "Stingray", "Stoat",
            "Stork", "Swallow", "Swan", "Swift", "Swordfish", "Tapir", "Tarantula", "Tarsier",
            "Termite", "Tern", "Thrush", "Tick", "Tiger", "Toad", "Tortoise", "Toucan",
            "Trout", "Tuna", "Turkey", "Turtle", "Uakari", "Vampire", "Vanga", "Varmint",
            "Vicuna", "Viper", "Vulture", "Wallaby", "Walrus", "Wasp", "Waterbuck", "Weasel",
            "Whale", "Wildcat", "Wolf", "Wolverine", "Wombat", "Woodpecker", "Worm", "Wren",
            "Yak", "Zebra", "Zebu", "Zonkey", "Zorse"
    );
    private static final List<Character> SPECIAL_CHARS = Arrays.asList(
            '_', '-', '.', '!', '?', '$', '%', '&', '*', '+'
    );
    private static final int MAX_ATTEMPTS = 100;
    private static final Set<String> usedNicknames = Collections.newSetFromMap(new ConcurrentHashMap<>());
    private static final Map<Complexity, AtomicInteger> counterMap = new EnumMap<>(Complexity.class);

    static {
        for (Complexity complexity : Complexity.values()) {
            counterMap.put(complexity, new AtomicInteger(0));
        }
    }

    public enum Complexity {
        SIMPLE, MEDIUM, COMPLEX
    }

    /**
     * 生成唯一的符合欧美用户习惯的AI昵称
     *
     * @param complexity 昵称复杂度
     * @return 生成的唯一昵称
     */
    public static String generateUniqueNickname(Complexity complexity) {
        String nickname;
        int attempts = 0;

        do {
            nickname = generateNickname(complexity);
            attempts++;

            if (attempts >= MAX_ATTEMPTS) {
                // 如果尝试多次仍无法生成唯一昵称，添加计数器后缀
                int count = counterMap.get(complexity).incrementAndGet();
                nickname = nickname + count;
                break;
            }
        } while (!usedNicknames.add(nickname));

        return nickname;
    }

    /**
     * 生成符合欧美用户习惯的AI昵称
     *
     * @param complexity 昵称复杂度
     * @return 生成的昵称
     */
    public static String generateNickname(Complexity complexity) {
        switch (complexity) {
            case SIMPLE:
                return generateSimpleNickname();
            case MEDIUM:
                return generateMediumNickname();
            case COMPLEX:
                return generateComplexNickname();
            default:
                return generateMediumNickname();
        }
    }

    /**
     * 生成简单昵称（4-8个字符）
     *
     * @return 简单昵称
     */
    private static String generateSimpleNickname() {
        List<String> options = new ArrayList<>();

        // 名字缩写
        options.addAll(FIRST_NAMES.stream()
                .filter(name -> name.length() >= 2 && name.length() <= 8)
                .map(name -> name.substring(0, Math.min(2, name.length())))
                .collect(Collectors.toList()));

        // 形容词
        options.addAll(ADJECTIVES.stream()
                .filter(adj -> adj.length() >= 4 && adj.length() <= 8)
                .collect(Collectors.toList()));

        // 动物
        options.addAll(ANIMALS.stream()
                .filter(animal -> animal.length() >= 4 && animal.length() <= 8)
                .collect(Collectors.toList()));

        if (options.isEmpty()) return "User";
        return options.get(random.nextInt(options.size()));
    }

    private static String generateMediumNickname() {
        List<String> options = new ArrayList<>();

        // 名字加姓氏首字母
        options.addAll(FIRST_NAMES.stream()
                .filter(name -> name.length() <= 7)
                .flatMap(name -> LAST_NAMES.stream()
                        .map(last -> name + last.charAt(0)))
                .filter(nick -> nick.length() >= 9 && nick.length() <= 12)
                .collect(Collectors.toList()));

        // 形容词加动物
        options.addAll(ADJECTIVES.stream()
                .flatMap(adj -> ANIMALS.stream()
                        .map(animal -> adj + animal))
                .filter(nick -> nick.length() >= 9 && nick.length() <= 12)
                .collect(Collectors.toList()));

        // 名字加特殊字符加动物
        options.addAll(FIRST_NAMES.stream()
                .filter(name -> name.length() <= 5)
                .flatMap(name -> ANIMALS.stream()
                        .filter(animal -> animal.length() <= 5)
                        .map(animal -> name +
                                SPECIAL_CHARS.get(random.nextInt(SPECIAL_CHARS.size())) +
                                animal))
                .filter(nick -> nick.length() >= 9 && nick.length() <= 12)
                .collect(Collectors.toList()));

        if (options.isEmpty()) return "User";
        return options.get(random.nextInt(options.size()));
    }

    private static String generateComplexNickname() {
        List<String> options = new ArrayList<>();

        // 形容词加名字加姓氏首字母
        List<String> group1 = ADJECTIVES.stream()
                .filter(adj -> adj.length() <= 5)
                .flatMap(adj -> FIRST_NAMES.stream()
                        .filter(name -> name.length() <= 5)
                        .flatMap(name -> LAST_NAMES.stream()
                                .map(last -> adj + name + last.charAt(0))))
                .filter(nick -> nick.length() >= 13 && nick.length() <= 16)
                .collect(Collectors.toList());
        options.addAll(group1);

        // 形容词加动物加特殊字符
        List<String> group2 = ADJECTIVES.stream()
                .filter(adj -> adj.length() <= 5)
                .flatMap(adj -> ANIMALS.stream()
                        .filter(animal -> animal.length() <= 5)
                        .map(animal -> adj + animal +
                                SPECIAL_CHARS.get(random.nextInt(SPECIAL_CHARS.size()))))
                .filter(nick -> nick.length() >= 13 && nick.length() <= 16)
                .collect(Collectors.toList());
        options.addAll(group2);

        // 名字加姓氏缩写加特殊字符
        List<String> group3 = FIRST_NAMES.stream()
                .filter(name -> name.length() <= 6)
                .flatMap(name -> LAST_NAMES.stream()
                        .filter(last -> last.length() >= 3)
                        .map(last -> name + last.substring(0, 2) +
                                SPECIAL_CHARS.get(random.nextInt(SPECIAL_CHARS.size()))))
                .filter(nick -> nick.length() >= 13 && nick.length() <= 20)
                .collect(Collectors.toList());
        options.addAll(group3);

        if (options.isEmpty()) return "User";
        return options.get(random.nextInt(options.size()));
    }

    /**
     * 检查昵称是否已被使用
     *
     * @param nickname 要检查的昵称
     * @return 如果昵称已被使用返回true，否则返回false
     */
    public static boolean isNicknameUsed(String nickname) {
        return usedNicknames.contains(nickname);
    }

    /**
     * 重置昵称生成器状态
     */
    public static void reset() {
        usedNicknames.clear();
        for (Complexity complexity : Complexity.values()) {
            counterMap.get(complexity).set(0);
        }
    }


    /**
     * 按指定比例生成不同长度的唯一昵称
     * 短:中:长 = 2:2:1
     *
     * @param count 需要生成的昵称数量
     * @return 包含指定数量唯一昵称的列表
     */
    public static List<String> generateUniqueNicknames(int count) {
        Set<String> uniqueNicknames = new LinkedHashSet<>(count);
        int maxAttempts = count; // 最大尝试次数，防止无限循环

        while (uniqueNicknames.size() < count && maxAttempts > 0) {
            // 计算当前需要的各长度段数量
            int total = uniqueNicknames.size();
            int targetShort = Math.min((count * 2 + 2) / 5, count - total);
            int targetMedium = Math.min((count * 2 + 2) / 5, count - total - targetShort);
            int targetLong = count - total - targetShort - targetMedium;

            // 根据剩余配额生成不同长度的昵称
            String nickname;
            if (targetShort > 0 && random.nextDouble() < 0.4) {
                nickname = generateSimpleNickname();
            } else if (targetMedium > 0 && random.nextDouble() < 0.6) {
                nickname = generateMediumNickname();
            } else {
                nickname = generateComplexNickname();
            }

            uniqueNicknames.add(nickname);
            maxAttempts--;
        }

        // 如果尝试后仍不足，添加默认昵称
        while (uniqueNicknames.size() < count) {
            uniqueNicknames.add("User" + UUID.randomUUID().toString().substring(24));
        }

        return new ArrayList<>(uniqueNicknames);
    }


    public static void main(String[] args) {
        // 测试生成100个唯一昵称
        List<String> nicknames = generateUniqueNicknames(500);
        // 输出结果，5个换行

        for (int i = 0; i < nicknames.size(); i++) {
            System.out.printf("%-20s", nicknames.get(i));
            if ((i + 1) % 5 == 0) {
                System.out.println();
            }
        }
    }
}    